package br.com.lopes.gci.model;

import java.io.Serializable;
//import java.util.ArrayList;
import java.util.Date;
//import java.util.List;

//import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
//import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;

/**
 * Cliente entity. @author MyEclipse Persistence Tools
 */
@Entity
@Table(name = "cliente", catalog = "gcibd")
public class Cliente implements Serializable {

	private static final long serialVersionUID = -554747020111828920L;

	// Fields

	@Id
	@Column(name = "fac", unique = true, nullable = false)
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	private Integer fac;
	
	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name = "tipo_pessoa", referencedColumnName="codigo")
	private Dominio tipoPessoa = new Dominio();
	
	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name = "meio_contato", referencedColumnName="codigo")
	private Dominio meioContato = new Dominio();
	
	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name = "status", referencedColumnName="codigo")
	private Dominio status = new Dominio();
	
	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name = "tipo_veiculo", referencedColumnName="codigo")
	private Dominio tipoVeiculo = new Dominio();
	
	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name = "estado_civil", referencedColumnName="codigo")
	private Dominio estadoCivil = new Dominio();
	
	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name = "sexo", referencedColumnName="codigo")
	private Dominio sexo = new Dominio();
	
	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name = "veiculo", referencedColumnName="codigo")
	private Dominio veiculo = new Dominio(39);
	
	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name = "endereco")
	private Endereco endereco = new Endereco();
	
	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name = "funcionario")
	private Funcionario funcionario = new Funcionario();
	
	@Column(name = "cpf", length = 11)
	private String cpf;
	
	@Column(name = "rg", length = 15)
	private String rg;
	
	@Column(name = "cnpj", length = 15)
	private String cnpj;
	
	@Column(name = "nome", length = 50)
	private String nome;
	
	@Column(name = "razao_social", length = 50)
	private String razaoSocial;
	
	@Column(name = "nome_fantasia", length = 50)
	private String nomeFantasia;
	
	@Column(name = "telefone_comercial", length = 11)
	private String telefoneComercial;
	
	@Column(name = "ramal", length = 5)
	private String ramal;
	
	@Column(name = "telefone_fax", length = 11)
	private String telefoneFax;
	
	@Column(name = "telefone_residencial", length = 11)
	private String telefoneResidencial;
	
	@Column(name = "telefone_celular", length = 11)
	private String telefoneCelular;
	
	@Column(name = "nome_pai", length = 50)
	private String nomePai;
	
	@Column(name = "nome_mae", length = 50)
	private String nomeMae;
	
	@Temporal(TemporalType.DATE)
	@Column(name = "data_nascimento", length = 10)
	private Date dataNascimento;
	
	@Column(name = "nome_conjuge", length = 50)
	private String nomeConjuge;
	
	@Column(name = "ocupacao_conjuge", length = 50)
	private String ocupacaoConjuge;
	
	@Column(name = "renda_mensal", precision = 22, scale = 0)
	private Double rendaMensal;
	
	@Column(name = "email", length = 60)
	private String email;
	
	@Column(name = "observacao", length = 200)
	private String observacao;
	
	@Transient
	private String nomeRazaoSocial;
	
	@Transient
	private String cpfCnpj;
	
	// Constructors

	/** default constructor */
	public Cliente() {
	}

	/** minimal constructor */
	public Cliente(Integer fac) {
		this.fac = fac;
	}

	/** full constructor */
	public Cliente(Integer fac, Dominio tipoPessoa,
			Dominio meioContato, Dominio status,
			Dominio tipoVeiculo, Dominio estadoCivil,
			Dominio sexo, Dominio veiculo, Endereco endereco,
			Funcionario funcionario, String cpf, String rg, String cnpj,
			String nome, String razaoSocial, String nomeFantasia,
			String telefoneComercial, String ramal, String telefoneFax,
			String telefoneResidencial, String telefoneCelular, String nomePai,
			String nomeMae, Date dataNascimento, String nomeConjuge,
			String ocupacaoConjuge, Double rendaMensal, String email) {
		this.fac = fac;
		this.tipoPessoa = tipoPessoa;
		this.meioContato = meioContato;
		this.status = status;
		this.tipoVeiculo = tipoVeiculo;
		this.estadoCivil = estadoCivil;
		this.sexo = sexo;
		this.veiculo = veiculo;
		this.endereco = endereco;
		this.funcionario = funcionario;
		this.cpf = cpf;
		this.rg = rg;
		this.cnpj = cnpj;
		this.nome = nome;
		this.razaoSocial = razaoSocial;
		this.nomeFantasia = nomeFantasia;
		this.telefoneComercial = telefoneComercial;
		this.ramal = ramal;
		this.telefoneFax = telefoneFax;
		this.telefoneResidencial = telefoneResidencial;
		this.telefoneCelular = telefoneCelular;
		this.nomePai = nomePai;
		this.nomeMae = nomeMae;
		this.dataNascimento = dataNascimento;
		this.nomeConjuge = nomeConjuge;
		this.ocupacaoConjuge = ocupacaoConjuge;
		this.rendaMensal = rendaMensal;
		this.email = email;
	}

	/**
	 * @return the fac
	 */
	public Integer getFac() {
		return fac;
	}

	/**
	 * @return the tipoPessoa
	 */
	public Dominio getTipoPessoa() {
		return tipoPessoa;
	}

	/**
	 * @return the meioContato
	 */
	public Dominio getMeioContato() {
		return meioContato;
	}

	/**
	 * @return the status
	 */
	public Dominio getStatus() {
		return status;
	}

	/**
	 * @return the tipoVeiculo
	 */
	public Dominio getTipoVeiculo() {
		return tipoVeiculo;
	}

	/**
	 * @return the estadoCivil
	 */
	public Dominio getEstadoCivil() {
		return estadoCivil;
	}

	/**
	 * @return the sexo
	 */
	public Dominio getSexo() {
		return sexo;
	}

	/**
	 * @return the veiculo
	 */
	public Dominio getVeiculo() {
		return veiculo;
	}

	/**
	 * @return the endereco
	 */
	public Endereco getEndereco() {
		return endereco;
	}

	/**
	 * @return the funcionario
	 */
	public Funcionario getFuncionario() {
		return funcionario;
	}

	/**
	 * @return the cpf
	 */
	public String getCpf() {
		return cpf;
	}

	/**
	 * @return the rg
	 */
	public String getRg() {
		return rg;
	}

	/**
	 * @return the cnpj
	 */
	public String getCnpj() {
		return cnpj;
	}

	/**
	 * @return the nome
	 */
	public String getNome() {
		return nome;
	}

	/**
	 * @return the razaoSocial
	 */
	public String getRazaoSocial() {
		return razaoSocial;
	}

	/**
	 * @return the nomeFantasia
	 */
	public String getNomeFantasia() {
		return nomeFantasia;
	}

	/**
	 * @return the telefoneComercial
	 */
	public String getTelefoneComercial() {
		return telefoneComercial;
	}

	/**
	 * @return the ramal
	 */
	public String getRamal() {
		return ramal;
	}

	/**
	 * @return the telefoneFax
	 */
	public String getTelefoneFax() {
		return telefoneFax;
	}

	/**
	 * @return the telefoneResidencial
	 */
	public String getTelefoneResidencial() {
		return telefoneResidencial;
	}

	/**
	 * @return the telefoneCelular
	 */
	public String getTelefoneCelular() {
		return telefoneCelular;
	}

	/**
	 * @return the nomePai
	 */
	public String getNomePai() {
		return nomePai;
	}

	/**
	 * @return the nomeMae
	 */
	public String getNomeMae() {
		return nomeMae;
	}

	/**
	 * @return the dataNascimento
	 */
	public Date getDataNascimento() {
		return dataNascimento;
	}

	/**
	 * @return the nomeConjuge
	 */
	public String getNomeConjuge() {
		return nomeConjuge;
	}

	/**
	 * @return the ocupacaoConjuge
	 */
	public String getOcupacaoConjuge() {
		return ocupacaoConjuge;
	}

	/**
	 * @return the rendaMensal
	 */
	public Double getRendaMensal() {
		return rendaMensal;
	}

	/**
	 * @return the email
	 */
	public String getEmail() {
		return email;
	}

	/**
	 * @param fac the fac to set
	 */
	public void setFac(Integer fac) {
		this.fac = fac;
	}

	/**
	 * @param tipoPessoa the tipoPessoa to set
	 */
	public void setTipoPessoa(Dominio tipoPessoa) {
		this.tipoPessoa = tipoPessoa;
	}

	/**
	 * @param meioContato the meioContato to set
	 */
	public void setMeioContato(Dominio meioContato) {
		this.meioContato = meioContato;
	}

	/**
	 * @param status the status to set
	 */
	public void setStatus(Dominio status) {
		this.status = status;
	}

	/**
	 * @param tipoVeiculo the tipoVeiculo to set
	 */
	public void setTipoVeiculo(Dominio tipoVeiculo) {
		this.tipoVeiculo = tipoVeiculo;
	}

	/**
	 * @param estadoCivil the estadoCivil to set
	 */
	public void setEstadoCivil(Dominio estadoCivil) {
		this.estadoCivil = estadoCivil;
	}

	/**
	 * @param sexo the sexo to set
	 */
	public void setSexo(Dominio sexo) {
		this.sexo = sexo;
	}

	/**
	 * @param veiculo the veiculo to set
	 */
	public void setVeiculo(Dominio veiculo) {
		this.veiculo = veiculo;
	}

	/**
	 * @param endereco the endereco to set
	 */
	public void setEndereco(Endereco endereco) {
		this.endereco = endereco;
	}

	/**
	 * @param funcionario the funcionario to set
	 */
	public void setFuncionario(Funcionario funcionario) {
		this.funcionario = funcionario;
	}

	/**
	 * @param cpf the cpf to set
	 */
	public void setCpf(String cpf) {
		this.cpf = cpf;
	}

	/**
	 * @param rg the rg to set
	 */
	public void setRg(String rg) {
		this.rg = rg;
	}

	/**
	 * @param cnpj the cnpj to set
	 */
	public void setCnpj(String cnpj) {
		this.cnpj = cnpj;
	}

	/**
	 * @param nome the nome to set
	 */
	public void setNome(String nome) {
		this.nome = nome;
	}

	/**
	 * @param razaoSocial the razaoSocial to set
	 */
	public void setRazaoSocial(String razaoSocial) {
		this.razaoSocial = razaoSocial;
	}

	/**
	 * @param nomeFantasia the nomeFantasia to set
	 */
	public void setNomeFantasia(String nomeFantasia) {
		this.nomeFantasia = nomeFantasia;
	}

	/**
	 * @param telefoneComercial the telefoneComercial to set
	 */
	public void setTelefoneComercial(String telefoneComercial) {
		this.telefoneComercial = telefoneComercial;
	}

	/**
	 * @param ramal the ramal to set
	 */
	public void setRamal(String ramal) {
		this.ramal = ramal;
	}

	/**
	 * @param telefoneFax the telefoneFax to set
	 */
	public void setTelefoneFax(String telefoneFax) {
		this.telefoneFax = telefoneFax;
	}

	/**
	 * @param telefoneResidencial the telefoneResidencial to set
	 */
	public void setTelefoneResidencial(String telefoneResidencial) {
		this.telefoneResidencial = telefoneResidencial;
	}

	/**
	 * @param telefoneCelular the telefoneCelular to set
	 */
	public void setTelefoneCelular(String telefoneCelular) {
		this.telefoneCelular = telefoneCelular;
	}

	/**
	 * @param nomePai the nomePai to set
	 */
	public void setNomePai(String nomePai) {
		this.nomePai = nomePai;
	}

	/**
	 * @param nomeMae the nomeMae to set
	 */
	public void setNomeMae(String nomeMae) {
		this.nomeMae = nomeMae;
	}

	/**
	 * @param dataNascimento the dataNascimento to set
	 */
	public void setDataNascimento(Date dataNascimento) {
		this.dataNascimento = dataNascimento;
	}

	/**
	 * @param nomeConjuge the nomeConjuge to set
	 */
	public void setNomeConjuge(String nomeConjuge) {
		this.nomeConjuge = nomeConjuge;
	}

	/**
	 * @param ocupacaoConjuge the ocupacaoConjuge to set
	 */
	public void setOcupacaoConjuge(String ocupacaoConjuge) {
		this.ocupacaoConjuge = ocupacaoConjuge;
	}

	/**
	 * @param rendaMensal the rendaMensal to set
	 */
	public void setRendaMensal(Double rendaMensal) {
		this.rendaMensal = rendaMensal;
	}

	/**
	 * @param email the email to set
	 */
	public void setEmail(String email) { 
		this.email = email;
	}

	public String getNomeRazaoSocial() {
		if(nome != null && !nome.equals("")){
			nomeRazaoSocial = nome;
		}else{
			if(razaoSocial != null && !razaoSocial.equals("")){
				nomeRazaoSocial = razaoSocial;
			}
		}
		return nomeRazaoSocial;
	}

	public void setNomeRazaoSocial(String nomeRazaoSocial) {
		this.nomeRazaoSocial = nomeRazaoSocial;
	}

	public String getCpfCnpj() {
		if(cpf != null && !cpf.equals("")){
			cpfCnpj = cpf;
		}else{
			if(cnpj != null && !cnpj.equals("")){
				cpfCnpj = cnpj;
			}
		}
		
		return cpfCnpj;
	}

	public void setCpfCnpj(String cpfCnpj) {
		this.cpfCnpj = cpfCnpj;
	}

	public String getObservacao() {
		return observacao;
	}

	public void setObservacao(String observacao) {
		
		this.observacao = observacao + ".";
	}
	
}